﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using ModeloDesenvolvimento;

namespace Poligas_ERP.Forms
{
    public partial class FrmCaixa : Form
    {
        SqlConnection cnx = new SqlConnection();
        SqlCommand cmd = new SqlCommand();
        SqlDataReader dr;

        DataTable dtCaixa = new DataTable();

        Db db = new Db();

        public FrmCaixa()
        {
            InitializeComponent();
        }

        void LimpaCampos()
        {
            dtpLancamento.Value = DateTime.Now;
            rdbEntrada.Checked = true;
            txtValor.Clear();
            txtHistorico.Clear();
        }
        void GravarLancamento()
        {
            string tipoLancamento = rdbEntrada.Checked ? "E" : "S";

            cnx = db.AbreConexao("strConexao");
            cmd = db.getCommand(cnx);
            cmd.CommandText = "spCaixaInsert";

            //cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@DataCaixa", dtpLancamento.Value);
            cmd.Parameters.AddWithValue("@Historico", txtHistorico.Text);
            cmd.Parameters.AddWithValue("@Tipo", tipoLancamento);
            decimal valorLancamento = rdbEntrada.Checked ? Convert.ToDecimal(txtValor.Text) : Convert.ToDecimal(txtValor.Text) * -1M;
            cmd.Parameters.AddWithValue("@Valor", valorLancamento);



            cmd.ExecuteNonQuery();

            db.FechaConexao(cnx);

            LimpaCampos();
            RecuperarCaixa();
            txtValor.Focus();
        }
        void RecuperarCaixa()
        {
            cnx = db.AbreConexao("strConexao");
            cmd = db.getCommand(cnx);

            cmd.CommandText = "spCaixaSelect";


            using(dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dtCaixa.Clear();
                dtCaixa.Load(dr);
                dgvCaixa.DataSource = dtCaixa;
            }

            db.FechaConexao(cnx);

            AtualizaValores();
        }
        void AtualizaValores()
        {
            decimal totalCaixa = 0M;
            foreach(DataGridViewRow r in dgvCaixa.Rows)
            {
                totalCaixa += Convert.ToDecimal(r.Cells["Valor"].Value);
            }
            txtTotalCaixa.Text = string.Format("{0:N2}", totalCaixa);
        }
        void FecharCaixa()
        {
            cnx = db.AbreConexao("strConexao");
            cmd = db.getCommand(cnx);

            cmd.CommandText = "spCaixaFechar";


            cmd.ExecuteNonQuery();

            db.FechaConexao(cnx);
            
            decimal totalCaixa = 0M;
            decimal.TryParse(txtTotalCaixa.Text, out totalCaixa);
            if(totalCaixa > 0M)
            {
                if(MessageBox.Show("Deseja lançar troco no caixa: " + txtTotalCaixa.Text, "Lançamento", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    LancarTroco();
                }
            }

            LimpaCampos();
            RecuperarCaixa();
            txtValor.Focus();
        }
        void LancarTroco()
        {
            cnx = db.AbreConexao("strConexao");
            cmd = db.getCommand(cnx);

            cmd.CommandText = "spCaixaInsert";
            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@DataCaixa", dtpLancamento.Value);
            cmd.Parameters.AddWithValue("@Historico", txtHistorico.Text);
            cmd.Parameters.AddWithValue("@Tipo", "E");

            cmd.Parameters.AddWithValue("@Valor", Convert.ToDecimal(txtTotalCaixa.Text));

           

            cmd.ExecuteNonQuery();
            db.FechaConexao(cnx);
            LimpaCampos();
            txtValor.Focus();
        }

        private void FrmCaixa_Load(object sender, EventArgs e)
        {
            dgvCaixa.AutoGenerateColumns = false;
            RecuperarCaixa();
            ActiveControl = txtValor;
            txtValor.Focus();
        }
        private void txtValor_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8) && e.KeyChar != Convert.ToChar(44))
                e.Handled = true;
        }
        private void FrmCaixa_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode == Keys.Return)
            {
                SendKeys.Send("{TAB}");
            }
        }
        private void FrmCaixa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(e.KeyChar == (char)13)
            {
                e.Handled = true;
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            decimal valorLancamento = 0M;
            decimal.TryParse(txtValor.Text, out valorLancamento);

            if(valorLancamento <= 0M)
            {
                MessageBox.Show("Digite o valor do lançamento", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtValor.Focus();
                return;
            }

            if(string.IsNullOrEmpty(txtHistorico.Text))
            {
                MessageBox.Show("Digite o histórico do lançamento", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtHistorico.Focus();
                return;
            }

            GravarLancamento();
        }
        private void btnLimpar_Click(object sender, EventArgs e)
        {
            LimpaCampos();
            txtValor.Focus();
        }
        private void btnFecharCaixa_Click(object sender, EventArgs e)
        {
            if(dgvCaixa.Rows.Count < 0)
            {
                MessageBox.Show("Não existem lançamentos para fechamento do caixa", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Information);
                txtValor.Focus();
                return;
            }

            if(MessageBox.Show("Confirma Fechamento do Caixa", "Fechamento", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                FecharCaixa();
            else
                txtValor.Focus();
        }
        
    }
}
